// 时间格式转换
export function setNowFormatDate(value, type) {
  const d = value

  const y = d.getFullYear() // 年份
  const m = (d.getMonth() + 1).toString().padStart(2, '0') // 月份
  const r = d.getDate().toString().padStart(2, '0') // 日子
  const h = d.getHours().toString().padStart(2, '0') // 小时
  const mm = d.getMinutes().toString().padStart(2, '0') // 分钟
  const ss = d.getSeconds().toString().padStart(2, '0') // 秒
  const _symbol = '-'
  let date = `${y}${_symbol}${m}${_symbol}${r}  ${h}:${mm}:${ss}`
  switch (type) {
    case 'year':
      date = `${y}` // es6 字符串模板
      break
    case 'month':
      date = `${y}${_symbol}${m}` // es6 字符串模板
      break
    case 'day':
      date = `${y}${_symbol}${m}${_symbol}${r}` // es6 字符串模板
      break
    case 'hour':
      date = `${y}${_symbol}${m}${_symbol}${r} ${h}` // es6 字符串模板
      break
    case 'minutes':
      date = `${y}${_symbol}${m}${_symbol}${r} ${h}:${mm}` // es6 字符串模板
      break
    case 'second':
      date = `${y}${_symbol}${m}${_symbol}${r} ${h}:${mm}:${ss}` // es6 字符串模板
      break
    case 'onYear':
      date = `${m}${_symbol}${r} ${h}:${mm}` // es6 字符串模板
      break
    case 'chinese_minutes':
      date = `${y}年${m}月${r}日${h}时${mm}分` // es6 字符串模板
      break
    default:
      date = `${y}${_symbol}${m}${_symbol}${r} ${h}:${mm}:${ss}` // es6 字符串模板
  }
  return date
}

// 获取链接参数
export function getURLParam(name, url = window.location.href) {
  const result = url.match(new RegExp('(\\?|&)' + name + '(\\[\\])?=([^&#]*)'))
  return result ? result[3] : ''
}

/**
 * 防抖函数 https://blog.csdn.net/weixin_44571638/article/details/118419042
 * vue this指向问题  https://zhuanlan.zhihu.com/p/128055659
 * @param {*} func 函数名
 * @param {*} wait 等待时间
 * @param {*} immediate true-立即执行 false-非立即执行
 * @returns
 */
export function boDebounce(funcName, wait, immediate) {
  let timeout
  return function() {
    const context = this
    const args = [...arguments]
    if (timeout) clearTimeout(timeout)
    if (immediate) {
      const callNow = !timeout
      timeout = setTimeout(() => {
        timeout = null
      }, wait)
      if (callNow) this[funcName].apply(context, args)
    } else {
      timeout = setTimeout(() => {
        this[funcName].apply(context, args)
      }, wait)
    }
  }
}
